/**
描述
  数据表记录包含表索引index和数值value（int范围的正整数），请对表索引相同的记录进行合并，即将相同索引的数值进行求和运算，输出按照index值升序进行输出。

  提示:
  0 <= index <= 11111111
  1 <= value <= 100000

  输入描述：
  先输入键值对的个数n（1 <= n <= 500）
  接下来n行每行输入成对的index和value值，以空格隔开

  输出描述：
  输出合并后的键值对（多行）
*/
const readline = require('readline')
const rl = readline.createInterface({
  input:process.stdin,
  output:process.stdout
})

function transform(inputArr) {
  const tempObj = {}
  inputArr.forEach((item) => {
    if (!tempObj[item[0]]) {
      tempObj[item[0]] = Number(item[1])
    } else {
      tempObj[item[0]] = tempObj[item[0]] + Number(item[1])
    }
  })
  // 循环输出结果
  const tempObjEntry = Object.entries(tempObj)
  tempObjEntry.forEach((item) => {
    console.log(item.join(' '))
  })
}

// let inputLen = 0;
// const inputArr = [[0, 1], [0, 2], [1, 2], [3, 4]]

let inputLen = 0;
const inputArr = []
// 本地测试
// transform(inputArr)

// 提交测试
rl.on('line', (line) => {
  if (line) {
    // 处理接收
    if (inputLen) {
      inputArr.push(line.split(' '))
      if (inputArr.length === inputLen)  transform(inputArr)
    } else {
      inputLen = Number(line)
    }
  }
})